iT邦幫忙

2023 iThome 鐵人賽

DAY 15
1

OLTP/OLAP/HTAP

前言

終於要準備介紹db的主要強項Query了。
在介紹Query前,要先了解你想達成的目標,
再透過目標的特性選擇適合的工具與方法,
因此,我們必須先了解什麼是OLTP,OLAP,HTAP所解決的問題,
下次遇到比較特別的Query方法時,就可以依照需求一一克服!

OLTP (Online Transactional Processing) 線上事務處理

優先考慮資料寫入操作
重點在於read和write會在同一table上處理tx,
並且強調強一致性的事務,
做write操作時會加上lock等機制,犧牲了部分讀寫效能。

使用情境

  • 拿來跑需要強一致性的事務,如交易搶票等
  • 少量資料查詢
  • 須符合ACID規則

實際方案

  • 一般CRUD

錯誤用法

  • 大量資料查詢
  • 無write操作
  • 可接受軟狀態的查詢
  • 數據分析

OLAP (Online Analytical Processing) 線上分析處理

資料讀取操作優先於資料寫入操作
重點在於query的table基本上不需要處理tx或write的操作,
而是透過同步或cronjob方式建立資料,以供查詢,
因不是透過tx來做處理,所以必須接受資料軟狀態。
又因write操作已經不是在同一張table上了,
所以query時必須容忍write操作同步到query table的時間差

使用情境

  • 大量資料查詢
  • 無write操作
  • 可接受軟狀態的查詢
  • 數據分析
  • 報表
  • 批次處理資料
  • 須符合BASE規則

實際方案

  • Partition Table
  • Database Sharding
  • MTV
  • 讀寫分離
  • DB cluster
  • 分散式DB

以上方案將會在後面的單元介紹,與簡單實做,
但僅僅點到為止,因為這些CRUD難的不是建立環境與架構,
而是那些架構所帶來的優缺點與解決方案與帶來的問題,
才是CRUD仔該克服的項目,將會在下集介紹

錯誤用法

  • 拿來跑需要強一致性的事務,如交易搶票等

混合事務分析處理(HTAP)

基本上這些DB都會符合一個特性就是可以具scalability,
其實就是分散式DB,
寫時使用其中一個DB,讀時使用其他DB,所以符合OLAP。
而如果要維持強一致性,在同一個DB讀寫,達到讀己所寫的效果,也可設定,所以也符合OLTP。

其實我們可以當作是一種架構的演進:

  • 原始架構: (OLTP) RDBMS單台做CRUD。
  • 建構OLAP: (OLAP) RDBMS單台做讀寫分離。
  • 建構HTAP: (HTAP) 將RDBMS做讀寫分離的並將資料層抽出,使其具scalability,引入分散式DB概念。

使用情境

  • 大量資料查詢
  • 無write操作
  • 可接受軟狀態的查詢
  • 數據分析
  • 報表
  • 批次處理資料
  • 須符合BASE規則
  • 拿來跑需要強一致性的事務,如交易搶票等
  • 少量資料查詢
  • 須符合ACID規則

實際方案

  • 拿OLTP的核心加上Citus等分散式機制

Citus將會再後續單元介紹。

錯誤用法

  • 小型商案
  • 系統資源小

結語

這裡一個不小心埋了太多坑QQ
不過沒有關西,大家先有基本的認識或知道是什麼東西,目的是什麼就可以了。
主要希望提醒大家,不要再拿OLAP該做的事情,放到OLTP的系統中硬生生地使用。
因為實在太多案例,
如資料科學家希望使用到大量資料,query時會特別慢。
而DBA就叫資料科學家不要這樣query等等,因此大吵一架。
這時其實可以建議DBA做個簡單的讀寫分離,
特別留一個READ的db拿來做資料分析,一天又和平的落幕了。

參考資料

  1. OLAP 和 OLTP 有什麼區別?
  2. OLTP、OLAP、HTAP对比

上一篇
[CREATE] Heap/Index Organized Table
下一篇
[QUERY] Index
系列文
CRUD仔的一生(上集)32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言